package org.dtrd.modules.achievement.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.dtrd.modules.achievement.entity.bean.PatientSigninPlan;
import org.dtrd.modules.achievement.entity.bean.SigninPlan;
import org.dtrd.modules.achievement.entity.bean.SigninTemplateContent;
import org.dtrd.modules.achievement.entity.po.DtrdEntRdSigninPlan;

import java.text.ParseException;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * @author 萧
 * @date 2021-09-21 22:50:23
 **/
public interface IDtrdEntRdSigninPlanService extends IService<DtrdEntRdSigninPlan> {

    /**
     * 获取患者各个星期的打卡计划的各项的打卡次数
     */
    Map<Integer, Map<Integer, Integer>> getPatientSigninCountByType(Integer patientId);

    /**
     * 获取患者星期的打卡计划的各项的打卡次数 map 集合
     */
    Map<Integer, Map<Integer, Map<Integer, Integer>>> listPatientsSigninCountByType(List<Integer> patientIds);

    boolean saveSigninPlan(SigninPlan request);

    Date getSigninPlanStartDate(Integer patientId);

    SigninPlan getSigninPlan(Integer patientId, String planDate);

    /**
     * 获取患者设置的打卡计划
     *
     * @return
     */
    PatientSigninPlan getSigninPlan(Integer patientId);

    /**
     * 查询当前全部有效
     *
     * @return
     */
    List<DtrdEntRdSigninPlan> getAllEffectivePlans();

    /**
     * 更新患者的打卡计划
     *
     * @param signinPlan
     */
    boolean updatePatientSignInPlanContent(PatientSigninPlan signinPlan);

    /**
     * 通过模版设置患者打卡计划
     */
    void savePatientSignInPlanFromTemplate(Integer patientId, Integer signInTemplateId, Date startTime, Date endTime);

    /**
     * 通过模版设置患者打卡计划
     */
    boolean updatePatientSignInPlanContentByTemplateId(Integer templateId);

    /**
     * 修改患者打卡计划的状态
     */
    boolean updatePatientSignInPlanStatus(Integer patientId, Integer status, String remark);

    /**
     * 结束患者打卡计划
     */
    boolean finishPatientSignInPlan(Integer patientId, Date startTime, Date endTime, String remark);
}
